package main

import "fmt"

func main() {
	//3、若有一个字符串(如`aabbbdcdsghjttttwwr`)，要求返回该字符串中最长的由同一字母组成的字符串（如`tttt`）
	// 先判断是否连续，如果不连续，则肯定不是最长的字符串
	//如果连续，则统计长度，到不连续的下标，保存在map中
	//通过判断map中value长度最大的值，将其输出
	str := "aabbbtdcdsghjttttwwr"
	//str := "aabbbdcdsghjttttwwww"
	str2 := []rune(str) //字符串遍历
	fmt.Printf("%c \n", str2)
	statisticsMap := make(map[int]int) //分配一个map存放出现数字as码及出现次数
	var maxInt int
	var strMax string
	var s2 []int
	var s3 []int
	// 判断连续的字符，并统计次数，注意统计出来的次数会少1
	for i := 0; i < len(str2)-1; i++ {
		if str2[i] == str2[i+1] {
			statisticsMap[int(str2[i])]++
		}
	}
	// 找出连续次数最多的字符
	for _, v := range statisticsMap {
		s2 = append(s2, v)
	}
	maxInt = s2[0]
	// 找出最大的值
	// 遍历所有次数，如果有比初始值大的就覆盖
	for i := 0; i < len(s2); i++ {
		if maxInt < s2[i] {
			maxInt = s2[i]
		}
	}
	// 遍历Map集合，匹配该最多次数有哪些字符，将字符存进切片中
	for k, v := range statisticsMap {
		if v == maxInt {
			s3 = append(s3, k)
		}
	}
	fmt.Println("最多的字符值位数:", maxInt+1) //最大出现次数
	fmt.Printf("最多的字符值: %c\n", s3)     //使用ascii码输出
	// 遍历长度最多的字符的切片，按照记录的长度，重新循环追加到字符串中
	for _, v := range s3 {
		for i := 0; i < maxInt+1; {
			strMax += string(v)
			i++
		}
	}
	//fmt.Printf("strMax: %v\n", strMax) //使用ascii码输出
	//fmt.Println("statisticsMap:", statisticsMap)
	fmt.Println(strMax)

}
